import router from '@/router'
import { useLoginUserStore } from '@/stores/useLoginUserStore.ts'
import ACCESS_ENUM from './accessEnum'
import checkAccess from './checkAccess'
import { message } from 'ant-design-vue'

router.beforeEach(async (to, from, next) => {
  const userStore = useLoginUserStore()
  let loginUser = userStore.loginUser

  // 获取目标路由元信息中设置的访问权限，如果未设置则默认使用未登录状态的权限
  const needAccess = (to.meta?.access as string) ?? ACCESS_ENUM.NOT_LOGIN

  // 若目标页面需要登录才能访问
  if (needAccess !== ACCESS_ENUM.NOT_LOGIN) {
    // // 如果之前没登陆过，自动登录
    if (!loginUser || !loginUser.userRole) {
      // 加 await 是为了等用户登录成功之后，再执行后续的代码
      await userStore.fetchLoginUser()
      loginUser = userStore.loginUser
    }

    // 检查用户是否未登录
    if (!loginUser || !loginUser.userRole || loginUser.userRole === ACCESS_ENUM.NOT_LOGIN) {
      // 将用户重定向到登录页面
      next(`/user/login?redirect=${to.fullPath}`)
      return
    }
    // 若用户已登录，但不具备访问目标页面的权限
    if (!checkAccess(loginUser, needAccess)) {
      message.error('没有权限')
      // 将用户重定向到无权限页面
      next('/noAuth')
      return
    }
  }
  // 若权限验证通过，允许路由跳转
  next()
})
